{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\Logo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "判断模块是否存在"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list\n",
    "#print(a)\n",
    "flag=False\n",
    "for i in a:\n",
    "    if 'matplot' in i:\n",
    "        print(i)\n",
    "        flag=True\n",
    "if flag==False:\n",
    "    print('未找到matplotlib...')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x26a847ea360>,\n",
       " <matplotlib.lines.Line2D at 0x26a847ea480>]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,7*np.pi)\n",
    "plt.plot(x,np.sin(10*x+np.pi/2),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "def draw_sin_wave(width, height):\n",
    "    for y in range(height):\n",
    "        sin_value = math.sin(2 * math.pi * y / height)\n",
    "        offset = int((sin_value + 1) * (width // 2))\n",
    "        for x in range(width):\n",
    "            if x == offset:\n",
    "                print('*', end='')\n",
    "            else:\n",
    "                print(' ', end='')\n",
    "        print()\n",
    "width = 80\n",
    "height = 20\n",
    "draw_sin_wave(width, height)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * trunk_space + '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#输入成绩\n",
    "def Score(score=100):\n",
    "    outchar=''\n",
    "    if score >= 90:\n",
    "        outchar= 'A'\n",
    "    elif score >= 80:\n",
    "        outchar= 'B'\n",
    "    elif score >= 70:\n",
    "        outchar= 'C'\n",
    "    elif score >= 60:\n",
    "        outchar= 'D'\n",
    "    else:\n",
    "        outchar= 'F'\n",
    "    print(outchar)\n",
    "Score(85)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from graphviz import Digraph\n",
    "\n",
    "# 创建一个有向图\n",
    "dot = Digraph(comment='Score Flowchart',node_attr={'fontname': 'SimHei'}, edge_attr={'fontname': 'SimHei'})\n",
    "\n",
    "# 定义节点和边\n",
    "dot.node('start', '开始')\n",
    "dot.node('score', '输入分数')\n",
    "dot.node('A', 'A')\n",
    "dot.node('B', 'B')\n",
    "dot.node('C', 'C')\n",
    "dot.node('D', 'D')\n",
    "dot.node('F', 'F')\n",
    "dot.node('end', '结束')\n",
    "\n",
    "# 添加边\n",
    "dot.edges(['sA', 'sB', 'sC', 'sD', 'sF'])\n",
    "dot.edge('start', 'score')\n",
    "dot.edge('score', 'A', label='>= 90')\n",
    "dot.edge('score', 'B', label='>= 80')\n",
    "dot.edge('score', 'C', label='>= 70')\n",
    "dot.edge('score', 'D', label='>= 60')\n",
    "dot.edge('score', 'F', label='< 60')\n",
    "dot.edge('A', 'end')\n",
    "dot.edge('B', 'end')\n",
    "dot.edge('C', 'end')\n",
    "dot.edge('D', 'end')\n",
    "dot.edge('F', 'end')\n",
    "\n",
    "# 渲染并保存流程图\n",
    "dot.render('graph', format='png', view=True)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 安装Graphviz\n",
    "- 1.下载https://www.graphviz.org/download/   \n",
    "- 2.安装  \n",
    "- 3.设定环境变量path，增加C:\\Program Files\\windows_10_msbuild_Release_graphviz-7.0.1-win32\\Graphviz\\bin   \n",
    "**也可在安装时候选择增加graphviz的路径到系统path中**\n",
    "- 4.pip install graphviz  \n",
    "- 5.import graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting graphviz\n",
      "  Downloading graphviz-0.20.3-py3-none-any.whl.metadata (12 kB)\n",
      "Downloading graphviz-0.20.3-py3-none-any.whl (47 kB)\n",
      "Installing collected packages: graphviz\n",
      "Successfully installed graphviz-0.20.3\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"214pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 214.11 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 210.11,-472 210.11,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-468 76.06,-468 76.06,-432 130.06,-432 130.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-444.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"206.11,-396 42.17,-396 0,-360 163.94,-360 206.11,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-372.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-431.7C103.06,-424.41 103.06,-415.73 103.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-407.62 103.06,-397.62 99.56,-407.62 106.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"144.81,-324 61.31,-324 61.31,-288 144.81,-288 144.81,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-359.7C103.06,-352.41 103.06,-343.73 103.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-335.62 103.06,-325.62 99.56,-335.62 106.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"154.93,-252 51.18,-252 51.18,-216 154.93,-216 154.93,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-287.7C103.06,-280.41 103.06,-271.73 103.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-263.62 103.06,-253.62 99.56,-263.62 106.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"168.43,-180 37.68,-180 37.68,-144 168.43,-144 168.43,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-215.7C103.06,-208.41 103.06,-199.73 103.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-191.62 103.06,-181.62 99.56,-191.62 106.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-108 76.06,-108 76.06,-72 130.06,-72 130.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-84.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-143.7C103.06,-136.41 103.06,-127.73 103.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-119.62 103.06,-109.62 99.56,-119.62 106.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"130.06,-36 76.06,-36 76.06,0 130.06,0 130.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"103.06\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M103.06,-71.7C103.06,-64.41 103.06,-55.73 103.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"106.56,-47.62 103.06,-37.62 99.56,-47.62 106.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26a8480cc50>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"420pt\" height=\"404pt\"\n",
       " viewBox=\"0.00 0.00 419.60 404.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 400)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-400 415.6,-400 415.6,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-396 178.8,-396 178.8,-360 232.8,-360 232.8,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-371.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"347.88,-324 121.87,-324 63.72,-288 289.74,-288 347.88,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输入Real Number =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-359.7C205.8,-352.41 205.8,-343.73 205.8,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-335.62 205.8,-325.62 202.3,-335.62 209.3,-335.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"205.8,-252 0,-234 205.8,-216 411.6,-234 205.8,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">判断RealNumber是否大于0？</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-287.7C205.8,-280.41 205.8,-271.73 205.8,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-263.62 205.8,-253.62 202.3,-263.62 209.3,-263.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"195.68,-180 31.93,-180 31.93,-144 195.68,-144 195.68,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"113.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M185.38,-217.46C173.69,-208.56 158.75,-197.2 145.55,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"148.03,-184.65 137.96,-181.38 143.79,-190.22 148.03,-184.65\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"381.93,-180 213.68,-180 213.68,-144 381.93,-144 381.93,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"297.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=&#45;RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M226.22,-217.46C237.92,-208.56 252.86,-197.2 266.05,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"267.81,-190.22 273.65,-181.38 263.57,-184.65 267.81,-190.22\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"301.15,-108 149.47,-108 110.45,-72 262.13,-72 301.15,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-83.83\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输出绝对值</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M136.54,-143.7C147.82,-135.11 161.63,-124.61 173.95,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"175.96,-118.1 181.8,-109.26 171.72,-112.53 175.96,-118.1\"/>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M275.06,-143.7C263.78,-135.11 249.97,-124.61 237.66,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"239.88,-112.53 229.81,-109.26 235.64,-118.1 239.88,-112.53\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-36 178.8,-36 178.8,0 232.8,0 232.8,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-71.7C205.8,-64.41 205.8,-55.73 205.8,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-47.62 205.8,-37.62 202.3,-47.62 209.3,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26a847910d0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "#i 循环变量\n",
    "#S 累加器\n",
    "#注意初值设定\n",
    "while (i<=R):\n",
    "    print('S=',S,'i=',i)\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "    print('S=',S,'i=',i)\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//img//jqm1.jpg\" width=\"150 \" alt=\"机器猫\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                   '?p8B%%%%MJ:.                                              \n",
      "                                              <Bf:::::::::::::::::m8/                                         \n",
      "                                            %_::::::::::::::::::::::::L#.                                     \n",
      "                                         .k{::::::,:::::::::;;,,:::::::::@                                    \n",
      "                                         %::::::,o.'M:::::::o'`p,:::::::::U]                                  \n",
      "                                      .Iz:::::::-@#$$:,::::!@n&B:,:::::::::u+                                 \n",
      "                                      ^d:,::::::;@$$W::::::,B$$p:::::::::,,,8                                 \n",
      "                                   I8:::::::::::::::::B,:B:::::,::::::::::::?l                                \n",
      "                                  %;:::,,}),\"1<,:::::,:,:,,:::::,l)()1::::,:,tW&.                             \n",
      "                                 h;,::::::;_+;:::::::::::,,::::::l)))1;:::::::::,d+                           \n",
      "                                 %::::::::::::::,,::::::::::::::::::::::::::::::::q^                          \n",
      "                           .ZW'  8,,:,n8@%8t;::::::::::::,,:::::::::::::::::::::,:>n#?                        \n",
      "                         ,8      \"h:&\\)]()))1YW::::::::::::::::::?LmQ[;:::::::::::q.   Lj                     \n",
      "                        M.         x0)())))))))f*,:::::::::,:%Q)))))))))u%::::,,;M;      8.                   \n",
      "                       W           .8)))))))))))(8;,,:,:;. Or)))))))))))))(8!zBJ          %                   \n",
      "                      j!            \"o)))))))))))pl::::::::a)))))))))))))))Y>             B.                  \n",
      "                      d.              M/)))))))))B-,:::::::%))))))))))))))1%             ,O                   \n",
      "                      `#                ?8X1))\\Y8          .#j)))))))))))|%             M_                    \n",
      "                        B.                                     *8O/\\jQ@8;            ,8l                      \n",
      "                          d'                                                       %.                         \n",
      "                         k.                                                        %                          \n",
      "                         %                                                        r!                          \n",
      "                         8                                                       O-                           \n",
      "                         .8                                                    ~M                             \n",
      "                           >%\"         ,B                       0.          .Mu                               \n",
      "                                .I!;,    qC                . _@<    `-z00j`                                   \n",
      "                                            :m%BMZf?ii?U&Bm'                                                  \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                                                                              \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\H3C\\AppData\\Local\\Temp\\ipykernel_1996\\2883404860.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"..//OIP-C.jpeg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Collecting matplotlib\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl (7.8 MB)\n",
      "     ---------------------------------------- 0.0/7.8 MB ? eta -:--:--\n",
      "     -- ------------------------------------- 0.5/7.8 MB 2.8 MB/s eta 0:00:03\n",
      "     ------ --------------------------------- 1.3/7.8 MB 3.2 MB/s eta 0:00:03\n",
      "     --------- ------------------------------ 1.8/7.8 MB 3.5 MB/s eta 0:00:02\n",
      "     ------------- -------------------------- 2.6/7.8 MB 3.2 MB/s eta 0:00:02\n",
      "     ----------------- ---------------------- 3.4/7.8 MB 3.2 MB/s eta 0:00:02\n",
      "     --------------------- ------------------ 4.2/7.8 MB 3.3 MB/s eta 0:00:02\n",
      "     ---------------------------- ----------- 5.5/7.8 MB 3.7 MB/s eta 0:00:01\n",
      "     -------------------------------- ------- 6.3/7.8 MB 3.9 MB/s eta 0:00:01\n",
      "     -------------------------------------- - 7.6/7.8 MB 4.1 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 7.8/7.8 MB 4.0 MB/s eta 0:00:00\n",
      "Collecting contourpy>=1.0.1 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl (220 kB)\n",
      "Collecting cycler>=0.10 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl (8.3 kB)\n",
      "Collecting fonttools>=4.22.0 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/aa/d1/5f007861cab890f2a35a19a1d2a2815655ec10b0ea7fd881b1d3aaab0076/fonttools-4.55.0-cp312-cp312-win_amd64.whl (2.2 MB)\n",
      "     ---------------------------------------- 0.0/2.2 MB ? eta -:--:--\n",
      "     --------- ------------------------------ 0.5/2.2 MB 5.6 MB/s eta 0:00:01\n",
      "     --------------------------------- ------ 1.8/2.2 MB 4.6 MB/s eta 0:00:01\n",
      "     --------------------------------- ------ 1.8/2.2 MB 4.6 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 2.2/2.2 MB 3.0 MB/s eta 0:00:00\n",
      "Collecting kiwisolver>=1.3.1 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl (55 kB)\n",
      "Requirement already satisfied: numpy>=1.23 in c:\\programdata\\miniconda3\\lib\\site-packages (from matplotlib) (2.1.3)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\programdata\\miniconda3\\lib\\site-packages (from matplotlib) (24.1)\n",
      "Collecting pillow>=8 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl (2.6 MB)\n",
      "     ---------------------------------------- 0.0/2.6 MB ? eta -:--:--\n",
      "     -------- ------------------------------- 0.5/2.6 MB 4.2 MB/s eta 0:00:01\n",
      "     -------------------- ------------------- 1.3/2.6 MB 4.0 MB/s eta 0:00:01\n",
      "     -------------------------------- ------- 2.1/2.6 MB 3.8 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 2.6/2.6 MB 3.9 MB/s eta 0:00:00\n",
      "Collecting pyparsing>=2.3.1 (from matplotlib)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl (106 kB)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in c:\\programdata\\miniconda3\\lib\\site-packages (from matplotlib) (2.9.0.post0)\n",
      "Requirement already satisfied: six>=1.5 in c:\\programdata\\miniconda3\\lib\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
      "Installing collected packages: pyparsing, pillow, kiwisolver, fonttools, cycler, contourpy, matplotlib\n",
      "Successfully installed contourpy-1.3.1 cycler-0.12.1 fonttools-4.55.0 kiwisolver-1.4.7 matplotlib-3.9.2 pillow-11.0.0 pyparsing-3.2.0\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "#%pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "%pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy                   2.1.3\n"
     ]
    }
   ],
   "source": [
    "li= !pip list\n",
    "for l in li:\n",
    "    if (\"numpy\" in l): \n",
    "        print(l)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
